package zhujie.demo2;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 反射的一些基本方法
 */
public class methods {
    public static void main(String[] args) {
         String path = "zhujie.demo2.Student";
        try {
            Class clz = Class.forName(path);

            //获取类的名字  包名+类名
            System.out.println(clz.getName());//zhujie.demo2.Student
            System.out.println(clz.getSimpleName());//Student

            //获取类属性
            //Field[] fields = clz.getFields();//只能获得public的属性
            Field[] fields =clz.getDeclaredFields();//获得所有的属性
            Field f= clz.getDeclaredField("name");//获得某一个属性
            System.out.println(f);
            for (Field field:
                 fields) {
                System.out.println(field);
            }

            //获取方法信息
            Method[] methods = clz.getDeclaredMethods();//获得所有方法
            Method m = clz.getDeclaredMethod("getName",null);//第二个方法表示参数的类型
            Method m1 = clz.getDeclaredMethod("setName",String.class);//如果有参数，必须传参数类型对应的class对象
            for (Method method:
                 methods) {
                System.out.println(method);
            }

            //获取构造器信息
            Constructor[] cons =  clz.getDeclaredConstructors();//获得所有构造器
            Constructor c = clz.getDeclaredConstructor(null);//获取的无参构造器
            Constructor c1 = clz.getDeclaredConstructor(String.class,int.class,String.class);
            for (Constructor con:
                 cons) {
                System.out.println("构造器"+con);

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
